/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package interfacesGraficas;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyVetoException;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.plaf.basic.BasicInternalFrameUI;

/**
 *
 * @author edu
 */
public class ControladorPrincipal extends Controlador {

    private HashMap<Enum, Controlador> controladores;
    private PantallaPrincipal pantalla;
    private Controlador controladorActual;
    private static ControladorPrincipal instancia;
    
    public static ControladorPrincipal getInstancia(){
        if(instancia == null){
            instancia = new ControladorPrincipal();
        }
        return instancia;
    }
    

    public ControladorPrincipal() {
        controladores = new HashMap<Enum, Controlador>();
        pantalla = new PantallaPrincipal();
        pantalla.setTitle("SISTEMA - ESTRUCTURAS SA");

        //***********Comportamiento

        //ABM Materiales
        pantalla.getJmenuNuevoMaterial().addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                iniciarContrlador(controlador.ABM_MATERIALES);
            }
        });

        //ABM Clientes
        pantalla.getJmenuabmCliente().addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent ae) {
                iniciarContrlador(controlador.ABM_CLIENTE);
            }
        });
        
        //ABM Proveedores
        pantalla.getjMenuNuevoProveedor().addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                iniciarContrlador(controlador.ABM_PROVEEDORES);
            }
        });

        pantalla.getjMenuNuevoPedido().addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent ae) {
                iniciarContrlador(controlador.PEDIDOS);
            }
        });
        //ABM Productos
        pantalla.getjMenuItemProductos().addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                iniciarContrlador(controlador.PRODUCTOS);
            }
        });

    }

    @Override
    public JInternalFrame getPantalla() {
        return null;
    }

    public PantallaPrincipal getPantallaPrincipal() {
        return pantalla;
    }

    public enum controlador {

        CONSULTAR_STOCK, REALIZAR_VTA, TOMAR_PEDIDO, CALCULAR_MATERIAL, CONSULTAR_PEDIDO,
        ABM_CLIENTE, ABM_PROVEEDORES, ABM_MATERIALES, ABM_VIAJANTE, PROYECTAR_MATERIALES,
        PEDIDOS, PRODUCTOS
        
    }
    /**
     * Crea un contrlador y lo inicia, si el contolador ya existe, hace visible la pantalla
     * @param nombre 
     */
    public void iniciarContrlador(controlador nombre) {
        if (controladorActual != null) {
            controladorActual.getPantalla().setVisible(false);
        }
        Controlador nuevoControlador = null;
        if (controladores.get(nombre) != null) {//El controlador ya ha sido iniciado
            controladores.get(nombre).continuar();
            return;
        }

        switch (nombre) {
            case CONSULTAR_STOCK:
            case REALIZAR_VTA:
            case TOMAR_PEDIDO:
            case CALCULAR_MATERIAL:
            case CONSULTAR_PEDIDO:
            case ABM_CLIENTE:
                nuevoControlador = new ControladorABMClientes();
                break;
            case ABM_MATERIALES:
                nuevoControlador = new ControladorMateriales();
                break;
            case ABM_PROVEEDORES:
                nuevoControlador = new ControladorProveedores();
                break;
            case PROYECTAR_MATERIALES:
            case PEDIDOS:
                nuevoControlador = new ControladorPedidos();
                break;
            case PRODUCTOS:
                nuevoControlador = new ControladorProductos();
                break;

        }
        controladores.put(nombre, nuevoControlador);//agrega el contrlador a la lista
        agregarPantallaInterna(nuevoControlador.getPantalla());
        try {//hace que el InternalFrame se maximice.
            nuevoControlador.getPantalla().setMaximum(true);
        } catch (PropertyVetoException ex) {
            Logger.getLogger(ControladorPrincipal.class.getName()).log(Level.SEVERE, null, ex);
        }
        ((BasicInternalFrameUI)nuevoControlador.getPantalla().getUI()).setNorthPane(null);//esto hace que el internal frame no tenga barra de titulos
        nuevoControlador.iniciar();
        controladorActual = nuevoControlador;
    }

    private void agregarPantallaInterna(Component pantallaInterna) {
        pantallaInterna.setBounds(0, 0, pantalla.getWidth(), pantalla.getHeight());
        pantalla.getJdesktopPane().add(pantallaInterna);

    }

    @Override
    public void iniciar() {
        pantalla.setVisible(true);
        pantalla.setExtendedState(JFrame.MAXIMIZED_BOTH);
    }

    @Override
    public void finalizar() {
        System.exit(0);
    }

    @Override
    public void continuar() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
    
}
